﻿//#include <iostream>
//using namespace std;
//void _func() { cout << endl; }
//template <class T, class... Args>
//void _func(const T& data, Args ...args)
//{
//	cout << data << " ";
//	_func(args...);
//}
//template <class ...Args>
//void func(Args ...args)
//{
//	_func(args...); 
//}
//int main()
//{
//	func(1, 1.2, "bit", 'a');
//	return 0;
//}

//template <typename T>
//class Func
//{
//public:
//    void func(T& t); //左值引用或const左值引用
//    void func(T&& t); //右值引用或const右值引用
//
///*注意，这里一般不会有const右值引用。
//通常const型右值引用通常没有实际意义，因为右值引用的主要目的是允许移动语义，
//而const会阻止这种移动，现实中根本不会出现，这里了解即可*/
//}

////样例一：
//void f(int&& data);  //没有模板参数，属于右值引用
//
////样例二：
//template<typename T>
//void f(vector<T>&& param); //参数类型是vector<T>，不是T，属于vector<T>的右值引用
//
////样例三：
//template<typename T>
//class vector
//
//{
//public:
//    void push_back(T&& x); //不是模板函数，属于右值引用
//}
////样例四：
//template<typename T>
//void f(T&& data); //模板函数，参数类型是模板参数，属于万能引用

//#include <list>
//#include "String.h"
//
//class Person {
//public:
//	Person(std::string name, int age) : name_(name), age_(age) {}
//private:
//	std::string name_;
//	int age_;
//};
//template<class T>
//struct ListNode
//{
//	T _data;
//	//左值构造
//	ListNode(const T& x = T()) : _data(x) {}
//	//右值构造
//	ListNode(T&& x) : _data(forward<T>(x)) {}
//
//	template<class ...Args>
//	ListNode(Args&&... args) : _data(forward<Args>(args)...) {}
//};
//
//int main()
//{
//
//	return 0;
//}
//int main()
//{
//	bit::list<bit::string> lt1;
//
//	bit::string s1("xxxx");
//	lt1.push_back(s1);
//	lt1.push_back(move(s1));
//	cout << "=============================================" << endl;
//
//	bit::string s2("xxxx");
//	lt1.emplace_back(s2);
//	lt1.emplace_back(move(s2));
//	cout << "=============================================" << endl;
//
//	lt1.push_back("xxxx");
//	lt1.emplace_back("xxxx");
//	cout << "=============================================" << endl;
//
//	return 0;
//}
